package apogeu.monitora.models.negocio;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import apogeu.monitora.models.Sessao;
import apogeu.monitora.models.dados.Prefeitura;

public class NegocioPrefeitura implements Serializable {

	private static final long serialVersionUID = 1L;
	
	public boolean update(String nome, String cpf, String senha) {
		Prefeitura prefeitura = this.buscar(nome);
		prefeitura.setCpf(cpf);
		prefeitura.setSenha(senha);
		
		SessionFactory sessionFactory = null;
		Session session = null;
		
		try {
			sessionFactory = Sessao.getSessionFactory();
			session = sessionFactory.openSession();
			Transaction transaction = session.beginTransaction();
			
			session.update(prefeitura);
			
			transaction.commit();
			
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) session.close();
			if (sessionFactory != null) sessionFactory.close();
		}
		return false;
	}

	public Prefeitura buscar(int id) {
		SessionFactory sessionFactory = null;
		Session session = null;
		
		try {
			sessionFactory = Sessao.getSessionFactory();
			session = sessionFactory.openSession();
			
			Prefeitura prefeitura = (Prefeitura) session.createCriteria(Prefeitura.class)
										.add(Restrictions.idEq(id))
										.uniqueResult();
			
			return prefeitura;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) session.close();
			if (sessionFactory != null) sessionFactory.close();
		}
		return null;
	}

	public Prefeitura buscar(String prefeitura) {
		SessionFactory sessionFactory = null;
		Session session = null;
		
		try {
			sessionFactory = Sessao.getSessionFactory();
			session = sessionFactory.openSession();
			
			Prefeitura objeto = (Prefeitura) session.createCriteria(Prefeitura.class)
										.add(Restrictions.eq("nome", prefeitura).ignoreCase())
										.uniqueResult();
			
			return objeto;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) session.close();
			if (sessionFactory != null) sessionFactory.close();
		}
		return null;
	}
	
	public int buscarCodigo(String prefeitura) {
		SessionFactory sessionFactory = null;
		Session session = null;
		
		try {
			sessionFactory = Sessao.getSessionFactory();
			session = sessionFactory.openSession();
			
			Prefeitura objeto = (Prefeitura) session.createCriteria(Prefeitura.class)
										.add(Restrictions.eq("nome", prefeitura))
										.uniqueResult();
			
			return objeto.getCdPrefeitura();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) session.close();
			if (sessionFactory != null) sessionFactory.close();
		}
		return -1;
	}
	
	public List<Prefeitura> list() {
		SessionFactory sessionFactory = null;
		Session session = null;
		
		try {
			sessionFactory = Sessao.getSessionFactory();
			session = sessionFactory.openSession();
			
			List<Prefeitura> lista = (List<Prefeitura>) session.getNamedQuery("prefeituras").list();
			
			return lista;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) session.close();
			if (sessionFactory != null) sessionFactory.close();
		}
		return null;
	}
	
	public boolean validarLogin(String prefeitura, String cpf, String senha) {
		SessionFactory sessionFactory = null;
		Session session = null;
		
		try {
			sessionFactory = Sessao.getSessionFactory();
			session = sessionFactory.openSession();
			
			Map<String, String> condicoes = new HashMap<String, String>();
			condicoes.put("nome", prefeitura);
			condicoes.put("cpf", cpf);
			condicoes.put("senha", senha);
			
			Criteria criteria = session.createCriteria(Prefeitura.class);
			criteria.add(Restrictions.allEq(condicoes));
			
			List<Prefeitura> lista = criteria.list();
			
			if (lista.size() > 0) {
				return true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) session.close();
			if (sessionFactory != null) sessionFactory.close();
		}
		return false;
	}
}
